package java_1_23;

/**
 * 泛型类
 */
public class MyClass<T,E> {
    /**
     * <>叫类型参数的声明
     * 类声明后的<>中的T被称为类型参数，用于指代任意类型
     * 实际上这个T只是个代表，写啥都行，表示此时value1,value2都是在类定义时没有明确类型，只有在使用时才告知编译器类型。
     * 出于规范而言，类型参数用单个的大写字母来代替
     * T：代表任意类
     * E：表示Element的意思，或是异常
     * K;V：K与V搭配使用：Map(Integer,String)
    */
    //T,E代表两种不同的类型参数，在具体使用时可以相同也可以不同
    T value1;
    E value2;

    /**
     * 泛型方法
     */
    public <S> S test(S s){
        System.out.println(s);
        return s;
    }
    public static void main(String[] args) {
        MyClass<Integer,String> myClass=new MyClass<>();
        myClass.value1=10;
        myClass.test("哇哦");


//        //创建这个泛型类的时候明确这个类型为整型
//        MyClass<Integer,String> myClass=new MyClass<>();
//        myClass.value1=10;
//        myClass.value2="哇";
//        MyClass<Integer,Integer> myClass1=new MyClass<>();
//        myClass1.value1=2;
//        myClass1.value2=4;
    }
}
